// Ground Decals
Texture2D<uint4> t3 : register(t3);

Texture2D<float4> t2 : register(t2);

Texture2D<float4> t1 : register(t1);

Texture2DArray<float4> t0 : register(t0);

SamplerState s2_s : register(s2);

SamplerState s1_s : register(s1);

SamplerState s0_s : register(s0);

cbuffer cb2 : register(b2)
{
  float4 cb2[13];
}

cbuffer cb1 : register(b1)
{
  float4 cb1[211];
}

cbuffer cb0 : register(b0)
{
  float4 cb0[15];
}




// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);
Texture2D<float4> StereoParams : register(t125);
#include <matrix.hlsl>

void main(
  float4 v0 : SV_Position0,
  uint v1 : SV_IsFrontFace0,
  out float4 o0 : SV_Target0,
  out float4 o2 : SV_Target2)
{
  float4 r0,r1,r2,r3,r4,r5;
  uint4 bitmask, uiDest;
  float4 fDest;
  
float4 stereo = StereoParams.Load(0);
float4 params = IniParams.Load(0);

matrix ivp = {cb0[0],cb0[1],cb0[2],cb0[3]};
matrix vp = inverse(ivp);

  r0.xy = (uint2)v0.xy;
  r0.zw = float2(0,0);
  r0.x = t3.Load(r0.xyz).x;
  r0.y = cmp(asint(cb0[14].x) != 0);
  r0.xz = (int2)r0.xx & int2(4,128);
  r0.xz = cmp((int2)r0.xz == int2(4,128));
  r0.w = ~(int)r0.y;
  r0.xz = r0.yw ? r0.xz : 0;
  r0.x = (int)r0.x | (int)r0.z;
  r0.yz = cb1[140].zw * v0.xy;
  r0.y = t1.SampleLevel(s2_s, r0.yz, 0).x;
  r1.xyzw = cb0[1].xyzw * v0.yyyy;
  r1.xyzw = v0.xxxx * cb0[0].xyzw + r1.xyzw;
  r1.xyzw = r0.yyyy * cb0[2].xyzw + r1.xyzw;
  r1.xyzw = cb0[3].xyzw + r1.xyzw;
  r1.xyz = r1.xyz / r1.www;
  
// screensize-x candidates:
// cb1[139].x
// cb1[140].x

float4 tmp = mul(float4(r1.xyz, 1), vp);
tmp.x -= stereo.x * (tmp.w - stereo.y) * cb1[139].x / 2;
r1.xyz = mul(tmp, ivp);

  r2.xyz = float3(1,1,1) + r1.xyz;
  r2.xyz = cmp(r2.xyz < float3(0,0,0));
  r0.z = (int)r2.y | (int)r2.x;
  r0.z = (int)r2.z | (int)r0.z;
  if (r0.z != 0) discard;
  r2.xyz = float3(1,1,1) + -r1.xyz;
  r2.xyz = cmp(r2.xyz < float3(0,0,0));
  r0.z = (int)r2.y | (int)r2.x;
  r0.z = (int)r2.z | (int)r0.z;
  if (r0.z != 0) discard;
  r0.y = 0.875 + -r0.y;
  r0.y = cmp(r0.y < 0);
  if (r0.y != 0) discard;
  r0.yzw = r1.xyz * float3(0.5,0.5,0.5) + float3(0.5,0.5,0.5);
  r0.zw = cb2[7].xy * r0.wz;
  r1.xyz = t2.Sample(s0_s, r0.zw).xyz;
  r2.xyz = -cb2[9].xyz + cb2[8].xyz;
  r2.xyz = r1.zzz * r2.xyz + cb2[9].xyz;
  r0.z = cmp(0 >= cb1[210].w);
  if (r0.z == 0) {
    r0.z = -1 + cb1[210].w;
    r0.z = r0.z / cb1[210].w;
    r0.w = 0.5 / cb1[210].w;
    r3.xyz = r2.xzy * r0.zzz + r0.www;
    r0.z = r3.y * cb1[210].w + -0.5;
    r0.w = floor(r0.z);
    r0.z = r0.z + -r0.w;
    r0.w = r3.x + r0.w;
    r3.y = r0.w / cb1[210].w;
    r3.w = 0;
    r4.xyz = t0.Sample(s1_s, r3.yzw).xyz;
    r0.w = 1 / cb1[210].w;
    r3.x = r3.y + r0.w;
    r3.xyz = t0.Sample(s1_s, r3.xzw).xyz;
    r3.xyz = r3.xyz + -r4.xyz;
    r3.xyz = r0.zzz * r3.xyz + r4.xyz;
    r3.xyz = r3.xyz + -r2.xyz;
    r2.xyz = cb1[210].xyz * r3.xyz + r2.xyz;
  }
  r0.z = cb2[11].x + r1.y;
  r0.z = saturate(cb2[11].w * r0.z);
  r0.w = dot(r1.xx, cb2[12].xx);
  r1.x = 1 + -r1.z;
  r0.w = -r1.x + r0.w;
  r0.w = saturate(cb2[12].y * r0.w);
  r0.w = saturate(cb2[12].z * r0.w);
  r0.y = r0.y * 2 + -1;
  r0.y = saturate(-abs(r0.y) * 4 + 4);
  r0.y = cb0[13].x * r0.y;
  r0.y = cb0[13].y * r0.y;
  o0.xyz = saturate(r2.xyz);
  r0.y = r0.w * r0.y;
  o2.x = r0.z * cb1[146].y + cb1[146].x;
  r1.xyzw = float4(-1,0,1,0) + v0.xyxy;
  r2.xyzw = cb1[140].zwzw * r1.xyzw;
  r0.z = t1.SampleLevel(s2_s, r2.xy, 0).x;
  r3.xyzw = cb1[45].xyzw * r1.yyyy;
  r3.xyzw = r1.xxxx * cb1[44].xyzw + r3.xyzw;
  r3.xyzw = r0.zzzz * cb1[46].xyzw + r3.xyzw;
  r3.xyzw = cb1[47].xyzw + r3.xyzw;
  r3.xyz = r3.zxy / r3.www;
  r3.xyz = -cb1[71].zxy + r3.xyz;
  r0.z = t1.SampleLevel(s2_s, r2.zw, 0).x;
  r2.xyzw = cb1[45].xyzw * r1.wwww;
  r1.xyzw = r1.zzzz * cb1[44].xyzw + r2.xyzw;
  r1.xyzw = r0.zzzz * cb1[46].xyzw + r1.xyzw;
  r1.xyzw = cb1[47].xyzw + r1.xyzw;
  r1.xyz = r1.zxy / r1.www;
  r1.xyz = -cb1[71].zxy + r1.xyz;
  r2.xyzw = float4(0,-1,0,1) + v0.xyxy;
  r4.xyzw = cb1[140].zwzw * r2.xyzw;
  r0.z = t1.SampleLevel(s2_s, r4.xy, 0).x;
  r5.xyzw = cb1[45].xyzw * r2.yyyy;
  r5.xyzw = r2.xxxx * cb1[44].xyzw + r5.xyzw;
  r5.xyzw = r0.zzzz * cb1[46].xyzw + r5.xyzw;
  r5.xyzw = cb1[47].xyzw + r5.xyzw;
  r5.xyz = r5.yzx / r5.www;
  r5.xyz = -cb1[71].yzx + r5.xyz;
  r0.z = t1.SampleLevel(s2_s, r4.zw, 0).x;
  r4.xyzw = cb1[45].xyzw * r2.wwww;
  r2.xyzw = r2.zzzz * cb1[44].xyzw + r4.xyzw;
  r2.xyzw = r0.zzzz * cb1[46].xyzw + r2.xyzw;
  r2.xyzw = cb1[47].xyzw + r2.xyzw;
  r2.xyz = r2.yzx / r2.www;
  r2.xyz = -cb1[71].yzx + r2.xyz;
  r2.xyz = r5.xyz + -r2.xyz;
  r0.z = dot(r2.xyz, r2.xyz);
  r0.z = rsqrt(r0.z);
  r2.xyz = r2.xyz * r0.zzz;
  r1.xyz = r1.xyz + -r3.xyz;
  r0.z = dot(r1.xyz, r1.xyz);
  r0.z = rsqrt(r0.z);
  r1.xyz = r1.xyz * r0.zzz;
  r3.xyz = r1.xyz * r2.xyz;
  r1.xyz = r1.zxy * r2.yzx + -r3.xyz;
  r0.z = dot(cb0[4].xyz, cb0[4].xyz);
  r0.z = rsqrt(r0.z);
  r2.xyz = cb0[4].xyz * r0.zzz;
  r0.z = dot(r1.xyz, r2.xyz);
  r0.z = cmp(cb0[13].z >= r0.z);
  r0.x = ~(int)r0.x;
  r0.x = (int)r0.x | (int)r0.z;
  r0.x = r0.x ? 0 : r0.y;
  o0.w = r0.x;
  o2.yz = float2(0,0);
  o2.w = r0.x;
  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Original ASM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
//   using 3Dmigoto v1.3.16 on Fri Sep 13 17:34:46 2019
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Position              0   xyzw        0      POS   float   xy
// SV_IsFrontFace           0   x           1    FFACE    uint
//
//
// Output signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Target                0   xyzw        0   TARGET   float   xyzw
// SV_Target                2   xyzw        2   TARGET   float   xyzw
//
ps_5_0
dcl_globalFlags refactoringAllowed
dcl_constantbuffer cb0[15], immediateIndexed
dcl_constantbuffer cb1[211], immediateIndexed
dcl_constantbuffer cb2[13], immediateIndexed
dcl_sampler s0, mode_default
dcl_sampler s1, mode_default
dcl_sampler s2, mode_default
dcl_resource_texture2darray (float,float,float,float) t0
dcl_resource_texture2d (float,float,float,float) t1
dcl_resource_texture2d (float,float,float,float) t2
dcl_resource_texture2d (uint,uint,uint,uint) t3
dcl_input_ps_siv linear noperspective v0.xy, position
dcl_output o0.xyzw
dcl_output o2.xyzw
dcl_temps 6
ftou r0.xy, v0.xyxx
mov r0.zw, l(0,0,0,0)
ld_indexable(texture2d)(uint,uint,uint,uint) r0.x, r0.xyzw, t3.xyzw
ine r0.y, cb0[14].x, l(0)
and r0.xz, r0.xxxx, l(4, 0, 128, 0)
ieq r0.xz, r0.xxzx, l(4, 0, 128, 0)
not r0.w, r0.y
and r0.xz, r0.yywy, r0.xxzx
or r0.x, r0.x, r0.z
mul r0.yz, v0.xxyx, cb1[140].zzwz
sample_l_indexable(texture2d)(float,float,float,float) r0.y, r0.yzyy, t1.yxzw, s2, l(0.000000)
mul r1.xyzw, v0.yyyy, cb0[1].xyzw
mad r1.xyzw, v0.xxxx, cb0[0].xyzw, r1.xyzw
mad r1.xyzw, r0.yyyy, cb0[2].xyzw, r1.xyzw
add r1.xyzw, r1.xyzw, cb0[3].xyzw
div r1.xyz, r1.xyzx, r1.wwww
add r2.xyz, r1.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
lt r2.xyz, r2.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000)
or r0.z, r2.y, r2.x
or r0.z, r2.z, r0.z
discard_nz r0.z
add r2.xyz, -r1.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
lt r2.xyz, r2.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000)
or r0.z, r2.y, r2.x
or r0.z, r2.z, r0.z
discard_nz r0.z
add r0.y, -r0.y, l(0.875000)
lt r0.y, r0.y, l(0.000000)
discard_nz r0.y
mad r0.yzw, r1.xxyz, l(0.000000, 0.500000, 0.500000, 0.500000), l(0.000000, 0.500000, 0.500000, 0.500000)
mul r0.zw, r0.wwwz, cb2[7].xxxy
sample_indexable(texture2d)(float,float,float,float) r1.xyz, r0.zwzz, t2.xyzw, s0
add r2.xyz, cb2[8].xyzx, -cb2[9].xyzx
mad r2.xyz, r1.zzzz, r2.xyzx, cb2[9].xyzx
ge r0.z, l(0.000000), cb1[210].w
if_z r0.z
  add r0.z, cb1[210].w, l(-1.000000)
  div r0.z, r0.z, cb1[210].w
  div r0.w, l(0.500000), cb1[210].w
  mad r3.xyz, r2.xzyx, r0.zzzz, r0.wwww
  mad r0.z, r3.y, cb1[210].w, l(-0.500000)
  round_ni r0.w, r0.z
  add r0.z, -r0.w, r0.z
  add r0.w, r0.w, r3.x
  div r3.y, r0.w, cb1[210].w
  mov r3.w, l(0)
  sample_indexable(texture2darray)(float,float,float,float) r4.xyz, r3.yzwy, t0.xyzw, s1
  div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), cb1[210].w
  add r3.x, r0.w, r3.y
  sample_indexable(texture2darray)(float,float,float,float) r3.xyz, r3.xzwx, t0.xyzw, s1
  add r3.xyz, -r4.xyzx, r3.xyzx
  mad r3.xyz, r0.zzzz, r3.xyzx, r4.xyzx
  add r3.xyz, -r2.xyzx, r3.xyzx
  mad r2.xyz, cb1[210].xyzx, r3.xyzx, r2.xyzx
endif
add r0.z, r1.y, cb2[11].x
mul_sat r0.z, r0.z, cb2[11].w
dp2 r0.w, r1.xxxx, cb2[12].xxxx
add r1.x, -r1.z, l(1.000000)
add r0.w, r0.w, -r1.x
mul_sat r0.w, r0.w, cb2[12].y
mul_sat r0.w, r0.w, cb2[12].z
mad r0.y, r0.y, l(2.000000), l(-1.000000)
mad_sat r0.y, -|r0.y|, l(4.000000), l(4.000000)
mul r0.y, r0.y, cb0[13].x
mul r0.y, r0.y, cb0[13].y
mov_sat o0.xyz, r2.xyzx
mul r0.y, r0.y, r0.w
mad o2.x, r0.z, cb1[146].y, cb1[146].x
add r1.xyzw, v0.xyxy, l(-1.000000, 0.000000, 1.000000, 0.000000)
mul r2.xyzw, r1.xyzw, cb1[140].zwzw
sample_l_indexable(texture2d)(float,float,float,float) r0.z, r2.xyxx, t1.yzxw, s2, l(0.000000)
mul r3.xyzw, r1.yyyy, cb1[45].xyzw
mad r3.xyzw, r1.xxxx, cb1[44].xyzw, r3.xyzw
mad r3.xyzw, r0.zzzz, cb1[46].xyzw, r3.xyzw
add r3.xyzw, r3.xyzw, cb1[47].xyzw
div r3.xyz, r3.zxyz, r3.wwww
add r3.xyz, r3.xyzx, -cb1[71].zxyz
sample_l_indexable(texture2d)(float,float,float,float) r0.z, r2.zwzz, t1.yzxw, s2, l(0.000000)
mul r2.xyzw, r1.wwww, cb1[45].xyzw
mad r1.xyzw, r1.zzzz, cb1[44].xyzw, r2.xyzw
mad r1.xyzw, r0.zzzz, cb1[46].xyzw, r1.xyzw
add r1.xyzw, r1.xyzw, cb1[47].xyzw
div r1.xyz, r1.zxyz, r1.wwww
add r1.xyz, r1.xyzx, -cb1[71].zxyz
add r2.xyzw, v0.xyxy, l(0.000000, -1.000000, 0.000000, 1.000000)
mul r4.xyzw, r2.xyzw, cb1[140].zwzw
sample_l_indexable(texture2d)(float,float,float,float) r0.z, r4.xyxx, t1.yzxw, s2, l(0.000000)
mul r5.xyzw, r2.yyyy, cb1[45].xyzw
mad r5.xyzw, r2.xxxx, cb1[44].xyzw, r5.xyzw
mad r5.xyzw, r0.zzzz, cb1[46].xyzw, r5.xyzw
add r5.xyzw, r5.xyzw, cb1[47].xyzw
div r5.xyz, r5.yzxy, r5.wwww
add r5.xyz, r5.xyzx, -cb1[71].yzxy
sample_l_indexable(texture2d)(float,float,float,float) r0.z, r4.zwzz, t1.yzxw, s2, l(0.000000)
mul r4.xyzw, r2.wwww, cb1[45].xyzw
mad r2.xyzw, r2.zzzz, cb1[44].xyzw, r4.xyzw
mad r2.xyzw, r0.zzzz, cb1[46].xyzw, r2.xyzw
add r2.xyzw, r2.xyzw, cb1[47].xyzw
div r2.xyz, r2.yzxy, r2.wwww
add r2.xyz, r2.xyzx, -cb1[71].yzxy
add r2.xyz, -r2.xyzx, r5.xyzx
dp3 r0.z, r2.xyzx, r2.xyzx
rsq r0.z, r0.z
mul r2.xyz, r0.zzzz, r2.xyzx
add r1.xyz, -r3.xyzx, r1.xyzx
dp3 r0.z, r1.xyzx, r1.xyzx
rsq r0.z, r0.z
mul r1.xyz, r0.zzzz, r1.xyzx
mul r3.xyz, r2.xyzx, r1.xyzx
mad r1.xyz, r1.zxyz, r2.yzxy, -r3.xyzx
dp3 r0.z, cb0[4].xyzx, cb0[4].xyzx
rsq r0.z, r0.z
mul r2.xyz, r0.zzzz, cb0[4].xyzx
dp3 r0.z, r1.xyzx, r2.xyzx
ge r0.z, cb0[13].z, r0.z
not r0.x, r0.x
or r0.x, r0.x, r0.z
movc r0.x, r0.x, l(0), r0.y
mov o0.w, r0.x
mov o2.yz, l(0,0,0,0)
mov o2.w, r0.x
ret
// Approximately 0 instruction slots used

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
